const app = require('express')()
const http = require('http').createServer(app)
// 根据http对象创建io对象
const io = require('socket.io')(http)

// 访问项目根路径时, 显示首页
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})

// 绑定连接的监听 => 一旦有一个客户端连接上服务器, 就会执行回调函数
// socket 与客户端的连接, 通过它可以向客户端发消息, 也可以接收客户端发送过来的消息
io.on('connection', (socket) => {
  console.log('与客户端建立ws连接')

  // 模拟当订单状态发生改变时, 发送消息给客户端
  setTimeout(() => {
    socket.emit('orderStatus', {status: 'payed'})
  }, 2000);

  // 绑定监听: sendMsg, 接收客户端发送消息
  socket.on('sendMsg', (msg) => {
    console.log('接收到客户端发送的消息: ', msg)
    socket.emit('backMsg', msg.toUpperCase())
  })
})

// 启动web服务器和websocket服务器
http.listen(4000, function () {
  console.log('server is running: http://localhost:4000')
})

// web服务器地址: http://localhost:4000
// websoket服务器地址: ws://localhost:4000